#ifndef CPP_ABS_LISTVIEW_H
#define CPP_ABS_LISTVIEW_H
#include <MotionEvent.h>
#include <widget/ViewGroup.h>

//@brief 列表控件抽象类
//@author cvte
//@description 定义列表控件公共接口
class AbsListView : public ViewGroup {
   public:
    AbsListView();
    ~AbsListView();

    void smoothScrollToPosition(int position);
    void smoothScrollByOffset(int offset);
    //@method 设置选中项，并触发回调和动效
    void setSelection(int position);
    //@method 设置选中项，shouldTriggerCallback为true就触发回调和动效，否则不触发回调和动效
    void setSelection(int position, bool shouldTriggerCallback);
    void setItemGap(int gap); //设置项间隔，单位px
    void setScrollbarShow(bool show);
    void setScrollbarSize(int x, int y, int width, int height);
    void setScrollbarColor(int color);
    void addHeaderView(View* view);
    void addFooterView(View* view);
    void setGapAheadFirstItem(int gap);

    //@method addHeaderView
    //@decription 在列表控件的顶部（非列表项呈的顶部), listview负责销毁该控件
    virtual void addHeaderView(View* view, long objTag, bool isSelectable);
    //@method addFooterView
    //@decription 在列表控件的底部（非列表项呈的底部), listview负责销毁该控件
    virtual void addFooterView(View* view, long objTag, bool isSelectable);

   protected:
    int mItemGap;
    int mGapAheadFirstItem = 0; //第一个item前的gap
    int mScrollBarX = 0;
    int mScrollBarY = 0;
    int mScrollBarWidth = 0;
    int mScrollBarHeight = 0;
    int mScrollBarColor = 0;
    bool mShowScrollBar = false;
    View* mHeaderView = nullptr;
    View* mFooterView = nullptr;
};

#endif /*CPP_ABS_LISTVIEW_H*/